package com.wy;

import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

import java.io.File;
import java.awt.*;

/**
 * 使用的时候需要注意两点。文件路劲别写错咯。
 * <p>
 * 最重要的就是 E:\soft_Wy\tess4\tessdata-4.1.0 这个路劲了，这个路劲里面放着训练好的文件，也可以叫模型，后缀是  traineddata  的文件，
 * 这个文件就是能识别这些图片的东西。 什么神经网络等。。。。  还有就是通过setLanguage 可以设置使用哪一种模型。 这个模型保存在了  网盘里面，
 * 当然，正确率高的速度慢，正确率低的速度快。
 * <p>
 * 其他等等参数的设置需要的时候可以慢慢找文档。
 * <p>
 * 会有很多的错误。包括了系统主机，tess4j jar包， 这个语言模型是哪个版本的Tesseract 训练出来的，这个版本也需要对应，如果对应。
 * 目前可以实现版本信息是： window下。5.7.0 的tess4j 版本。   对应的是(tessdata-4.1.0) 版本的模型。一一对应。 否则会出错
 * <p>
 * 再说说这个参数 ”E:\soft_Wy\tess4\tessdata-4.1.0“ 的路劲问题。可以设置为环境变量 （TESSDATA_PREFIX），但是吧，总感觉不太对，
 * 不设置环境变量的话有两种设置方式：
 *      1.  System.setProperty("TESSDATA_PREFIX", "E:\\soft_Wy\\tess4\\tessdata-4.1.0");
 *      2.  tesseract.setDatapath("E:\\soft_Wy\\tess4\\tessdata-4.1.0");，这儿务必是全路径。
 *
 * 暂时还没有自己训练模型的打算。
 *
 *
 */
public class MainServer {
    public static void main(String[] args) throws TesseractException {
//       System.setProperty("TESSDATA_PREFIX", "E:\\soft_Wy\\tess4\\tessdata-4.1.0");

        long start = System.currentTimeMillis();
        System.out.println("开始OCR文字识图，请稍后...");
        //加载要识别的图片
        File image = new File("C:\\Users\\Administrator\\Desktop\\captcha (1).jpg");
        //设置配置文件夹微视、识别语言、识别模式
        Tesseract tesseract = new Tesseract();
        tesseract.setDatapath("E:\\soft_Wy\\tess4\\tessdata-4.1.0");
//       设置识别语言为中文简体，（如果要设置为英文可改为"eng"）
        tesseract.setLanguage("eng");
        //使用 OSD 进行自动页面分割以进行图像处理
        tesseract.setPageSegMode(1);
        //设置引擎模式是神经网络LSTM引擎
        tesseract.setOcrEngineMode(1);
        //开始识别整张图片中的文字
        String result = tesseract.doOCR(image);
        long time = System.currentTimeMillis() - start;
        System.out.println("识别结束,耗时：" + time + " 毫秒，识别结果如下：");
        System.out.println(result);
    }
}
